﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using EvertonApp.Transporte;

namespace EvertonApp.Data
{
    class TestComentariosRepository : IRepository<Comentario>
    {

        private static Usuario _usuario = TestHilosRepository._usuario;
        private static Hilo _hilo = TestHilosRepository._hilos.First();

        private static List<Comentario> _comentarios = new List<Comentario> {
                                                    new Comentario {IdComentario = Guid.NewGuid(), ComentarioId = Guid.Empty, CreadoPor = _usuario, Descripcion = "LA DURA?!", Editado = false, FechaCreacion = DateTime.Now, HiloId = _hilo.IdHilo},
                                                    new Comentario {IdComentario = Guid.NewGuid(), ComentarioId = Guid.Empty, CreadoPor = _usuario, Descripcion = "la xuxa", Editado = false, FechaCreacion = DateTime.Now, HiloId = _hilo.IdHilo}, 
                                                    new Comentario {IdComentario = Guid.NewGuid(), ComentarioId = Guid.Empty, CreadoPor = _usuario, Descripcion = "esto es fome", Editado = false, FechaCreacion = DateTime.Now, HiloId = _hilo.IdHilo}};


        #region Implementation of IRepository<comentario>

        public Comentario Insert(Comentario entity)
        {
            _comentarios.Add(entity);
            entity.ComentarioId = Guid.NewGuid();
            return entity;
        }

        public bool Delete(Comentario entity)
        {
            return _comentarios.Remove(entity);
        }

        public bool Update(Guid id, Comentario entity)
        {
            Comentario comentario = _comentarios.FirstOrDefault(o => o.IdComentario == id);
            if (comentario != null)
            {
                comentario.IdComentario = entity.IdComentario;
                comentario.HiloId = entity.HiloId;
                comentario.ComentarioId = entity.ComentarioId;
                comentario.Descripcion = entity.Descripcion;
                comentario.CreadoPor = entity.CreadoPor;
                comentario.Editado = entity.Editado;
                comentario.FechaCreacion = entity.FechaCreacion;
            }else
            {
                return false;
            }
            return true;
        }

        public IQueryable<Comentario> SearchFor(Expression<Func<Comentario, bool>> predicate)
        {
            var collection = _comentarios.AsQueryable();

            return collection.Where(predicate);
        }

        public IQueryable<Comentario> GetAll()
        {
            return _comentarios.AsQueryable();
        }

        public Comentario GetById(Guid id)
        {
            return _comentarios.Single(o => o.IdComentario == id);
        }

        #endregion

    }
}
